package testes;

import static org.junit.Assert.*;
import iscte.es.copaPaises.businessLayer.Campeonato;
import iscte.es.copaPaises.businessLayer.Clube;
import iscte.es.copaPaises.businessLayer.Jogador;
import iscte.es.copaPaises.businessLayer.Pais;
import iscte.es.copaPaises.businessLayer.Participacao;
import iscte.es.copaPaises.businessLayer.PosicaoJogador;
import iscte.es.copaPaises.businessLayer.Treinador;

import java.util.HashSet;
import java.util.Set;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class ParticipacaoTest {
	private Participacao p;
	private int classificacao;
	private boolean organizador;
	private Campeonato c;
	private Set<Jogador> plantel;
	private Treinador t;
	private Pais pais;

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
	}

	@Before
	public void setUp() throws Exception {
		classificacao=2;
		organizador=true;
		c=new Campeonato();
		plantel=new HashSet<Jogador>();
		p=new Participacao();
		t=new Treinador();
		pais=new Pais();
	}

	@After
	public void tearDown() throws Exception {
	}

	@Test
	public void testParticipacao() {
		assertTrue("Participacao()",Participacao.allInstances.contains(p));
	}

	@Test
	public void testParticipacaoIntBooleanCampeonatoPaisSetOfJogadorTreinador() {
		p=new Participacao(classificacao,organizador,c,pais,plantel,t);
		assertTrue(" Participacao(classificacao,organizador,campeonato,pais,plantel,treinador)",Participacao.allInstances.contains(p));
	}

	@Test
	public void testClassificacao() {
		p.setClassificacao(classificacao);
		assertEquals("Setter/Getter Participacao.classificacao()",p.classificacao(),classificacao);
	}

	@Test
	public void testOrganizador() {
		p.setOrganizador(organizador);
		assertEquals("Setter/Getter Participacao.organizador()",p.organizador(),organizador);
	}

	@Test
	public void testParticipado() {
		p.setParticipado(c);
		assertEquals("Setter/Getter Participacao.participado()",p.participado(),c);

	}

	@Test
	public void testParticipante() {
		p.setParticipante(pais);
		assertEquals("Setter/Getter Participacao.participado()",p.participante(),pais);

	}

	@Test
	public void testPlantel() {
		plantel.add(new Jogador());
		plantel.add(new Jogador());
		p.setPlantel(plantel);
		assertEquals("Setter/Getter Participado.plantel()",plantel,p.plantel());

	}

	@Test
	public void testTreinador() {
		p.setTreinador(t);
		assertEquals("Setter/Getter Participacao.treinador()",p.treinador(),t);

	}

	@Test
	public void testAdicionaJogador() {
		Clube.allInstances.clear();
		String nome="Alfredo";
		String data_nascimento="2009-03-13";		
		String clube="SLB";
		PosicaoJogador posicao=PosicaoJogador.Avancado;
		int plantel_inical=p.plantel().size();
		p.adicionaJogador(nome,data_nascimento, posicao, pais,clube,pais);
		assertEquals(p.plantel().size(),plantel_inical+1);
		plantel_inical=p.plantel().size();
		p.adicionaJogador(nome,data_nascimento, posicao, pais,clube,pais);
		assertEquals(p.plantel().size(),plantel_inical+1);

	}

	@Test
	public void testOrganiza() {
		assertFalse("Participacao.organiza()",p.organizador());
		p.organiza();	
		assertTrue("Participacao.organiza()",p.organizador());
	}
	
	@Test
	public void testToString() {
		p=new Participacao(classificacao,organizador,c,pais,plantel,t);
		assertEquals(p.toString(),"Participacao [classificacao=" + classificacao + ", organizador=" + organizador + ", participado=" + c + ", participante=" + pais + ", plantel=" + plantel + ", treinador=" + t + "]\n");
	}

}
